home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / etr.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  7.5 KB  |  259 lines

  1. /*
  2.  *  include/asm-s390/etr.h
  3.  *
  4.  *  Copyright IBM Corp. 2006
  5.  *  Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
  6.  */
  7. #ifndef __S390_ETR_H
  8. #define __S390_ETR_H
  9.  
  10. /* ETR attachment control register */
  11. struct etr_eacr {
  12.     unsigned int e0        : 1;    /* port 0 stepping control */
  13.     unsigned int e1        : 1;    /* port 1 stepping control */
  14.     unsigned int _pad0    : 5;    /* must be 00100 */
  15.     unsigned int dp        : 1;    /* data port control */
  16.     unsigned int p0        : 1;    /* port 0 change recognition control */
  17.     unsigned int p1        : 1;    /* port 1 change recognition control */
  18.     unsigned int _pad1    : 3;    /* must be 000 */
  19.     unsigned int ea        : 1;    /* ETR alert control */
  20.     unsigned int es        : 1;    /* ETR sync check control */
  21.     unsigned int sl        : 1;    /* switch to local control */
  22. } __attribute__ ((packed));
  23.  
  24. /* Port state returned by steai */
  25. enum etr_psc {
  26.     etr_psc_operational = 0,
  27.     etr_psc_semi_operational = 1,
  28.     etr_psc_protocol_error =  4,
  29.     etr_psc_no_symbols = 8,
  30.     etr_psc_no_signal = 12,
  31.     etr_psc_pps_mode = 13
  32. };
  33.  
  34. /* Logical port state returned by stetr */
  35. enum etr_lpsc {
  36.     etr_lpsc_operational_step = 0,
  37.     etr_lpsc_operational_alt = 1,
  38.     etr_lpsc_semi_operational = 2,
  39.     etr_lpsc_protocol_error =  4,
  40.     etr_lpsc_no_symbol_sync = 8,
  41.     etr_lpsc_no_signal = 12,
  42.     etr_lpsc_pps_mode = 13
  43. };
  44.  
  45. /* ETR status words */
  46. struct etr_esw {
  47.     struct etr_eacr eacr;        /* attachment control register */
  48.     unsigned int y        : 1;    /* stepping mode */
  49.     unsigned int _pad0    : 5;    /* must be 00000 */
  50.     unsigned int p        : 1;    /* stepping port number */
  51.     unsigned int q        : 1;    /* data port number */
  52.     unsigned int psc0    : 4;    /* port 0 state code */
  53.     unsigned int psc1    : 4;    /* port 1 state code */
  54. } __attribute__ ((packed));
  55.  
  56. /* Second level data register status word */
  57. struct etr_slsw {
  58.     unsigned int vv1    : 1;    /* copy of validity bit data frame 1 */
  59.     unsigned int vv2    : 1;    /* copy of validity bit data frame 2 */
  60.     unsigned int vv3    : 1;    /* copy of validity bit data frame 3 */
  61.     unsigned int vv4    : 1;    /* copy of validity bit data frame 4 */
  62.     unsigned int _pad0    : 19;    /* must by all zeroes */
  63.     unsigned int n        : 1;    /* EAF port number */
  64.     unsigned int v1        : 1;    /* validity bit ETR data frame 1 */
  65.     unsigned int v2        : 1;    /* validity bit ETR data frame 2 */
  66.     unsigned int v3        : 1;    /* validity bit ETR data frame 3 */
  67.     unsigned int v4        : 1;    /* validity bit ETR data frame 4 */
  68.     unsigned int _pad1    : 4;    /* must be 0000 */
  69. } __attribute__ ((packed));
  70.  
  71. /* ETR data frames */
  72. struct etr_edf1 {
  73.     unsigned int u        : 1;    /* untuned bit */
  74.     unsigned int _pad0    : 1;    /* must be 0 */
  75.     unsigned int r        : 1;    /* service request bit */
  76.     unsigned int _pad1    : 4;    /* must be 0000 */
  77.     unsigned int a        : 1;    /* time adjustment bit */
  78.     unsigned int net_id    : 8;    /* ETR network id */
  79.     unsigned int etr_id    : 8;    /* id of ETR which sends data frames */
  80.     unsigned int etr_pn    : 8;    /* port number of ETR output port */
  81. } __attribute__ ((packed));
  82.  
  83. struct etr_edf2 {
  84.     unsigned int etv    : 32;    /* Upper 32 bits of TOD. */
  85. } __attribute__ ((packed));
  86.  
  87. struct etr_edf3 {
  88.     unsigned int rc        : 8;    /* failure reason code */
  89.     unsigned int _pad0    : 3;    /* must be 000 */
  90.     unsigned int c        : 1;    /* ETR coupled bit */
  91.     unsigned int tc        : 4;    /* ETR type code */
  92.     unsigned int blto    : 8;    /* biased local time offset */
  93.                     /* (blto - 128) * 15 = minutes */
  94.     unsigned int buo    : 8;    /* biased utc offset */
  95.                     /* (buo - 128) = leap seconds */
  96. } __attribute__ ((packed));
  97.  
  98. struct etr_edf4 {
  99.     unsigned int ed        : 8;    /* ETS device dependent data */
  100.     unsigned int _pad0    : 1;    /* must be 0 */
  101.     unsigned int buc    : 5;    /* biased ut1 correction */
  102.                     /* (buc - 16) * 0.1 seconds */
  103.     unsigned int em        : 6;    /* ETS error magnitude */
  104.     unsigned int dc        : 6;    /* ETS drift code */
  105.     unsigned int sc        : 6;    /* ETS steering code */
  106. } __attribute__ ((packed));
  107.  
  108. /*
  109.  * ETR attachment information block, two formats
  110.  * format 1 has 4 reserved words with a size of 64 bytes
  111.  * format 2 has 16 reserved words with a size of 96 bytes
  112.  */
  113. struct etr_aib {
  114.     struct etr_esw esw;
  115.     struct etr_slsw slsw;
  116.     unsigned long long tsp;
  117.     struct etr_edf1 edf1;
  118.     struct etr_edf2 edf2;
  119.     struct etr_edf3 edf3;
  120.     struct etr_edf4 edf4;
  121.     unsigned int reserved[16];
  122. } __attribute__ ((packed,aligned(8)));
  123.  
  124. /* ETR interruption parameter */
  125. struct etr_irq_parm {
  126.     unsigned int _pad0    : 8;
  127.     unsigned int pc0    : 1;    /* port 0 state change */
  128.     unsigned int pc1    : 1;    /* port 1 state change */
  129.     unsigned int _pad1    : 3;
  130.     unsigned int eai    : 1;    /* ETR alert indication */
  131.     unsigned int _pad2    : 18;
  132. } __attribute__ ((packed));
  133.  
  134. /* Query TOD offset result */
  135. struct etr_ptff_qto {
  136.     unsigned long long physical_clock;
  137.     unsigned long long tod_offset;
  138.     unsigned long long logical_tod_offset;
  139.     unsigned long long tod_epoch_difference;
  140. } __attribute__ ((packed));
  141.  
  142. /* Inline assembly helper functions */
  143. static inline int etr_setr(struct etr_eacr *ctrl)
  144. {
  145.     int rc = -ENOSYS;
  146.  
  147.     asm volatile(
  148.         "    .insn    s,0xb2160000,0(%2)\n"
  149.         "0:    la    %0,0\n"
  150.         "1:\n"
  151.         EX_TABLE(0b,1b)
  152.         : "+d" (rc) : "m" (*ctrl), "a" (ctrl));
  153.     return rc;
  154. }
  155.  
  156. /* Stores a format 1 aib with 64 bytes */
  157. static inline int etr_stetr(struct etr_aib *aib)
  158. {
  159.     int rc = -ENOSYS;
  160.  
  161.     asm volatile(
  162.         "    .insn    s,0xb2170000,0(%2)\n"
  163.         "0:    la    %0,0\n"
  164.         "1:\n"
  165.         EX_TABLE(0b,1b)
  166.         : "+d" (rc) : "m" (*aib), "a" (aib));
  167.     return rc;
  168. }
  169.  
  170. /* Stores a format 2 aib with 96 bytes for specified port */
  171. static inline int etr_steai(struct etr_aib *aib, unsigned int func)
  172. {
  173.     register unsigned int reg0 asm("0") = func;
  174.     int rc = -ENOSYS;
  175.  
  176.     asm volatile(
  177.         "    .insn    s,0xb2b30000,0(%2)\n"
  178.         "0:    la    %0,0\n"
  179.         "1:\n"
  180.         EX_TABLE(0b,1b)
  181.         : "+d" (rc) : "m" (*aib), "a" (aib), "d" (reg0));
  182.     return rc;
  183. }
  184.  
  185. /* Function codes for the steai instruction. */
  186. #define ETR_STEAI_STEPPING_PORT        0x10
  187. #define ETR_STEAI_ALTERNATE_PORT    0x11
  188. #define ETR_STEAI_PORT_0        0x12
  189. #define ETR_STEAI_PORT_1        0x13
  190.  
  191. static inline int etr_ptff(void *ptff_block, unsigned int func)
  192. {
  193.     register unsigned int reg0 asm("0") = func;
  194.     register unsigned long reg1 asm("1") = (unsigned long) ptff_block;
  195.     int rc = -ENOSYS;
  196.  
  197.     asm volatile(
  198.         "    .word    0x0104\n"
  199.         "    ipm    %0\n"
  200.         "    srl    %0,28\n"
  201.         : "=d" (rc), "=m" (ptff_block)
  202.         : "d" (reg0), "d" (reg1), "m" (ptff_block) : "cc");
  203.     return rc;
  204. }
  205.  
  206. /* Function codes for the ptff instruction. */
  207. #define ETR_PTFF_QAF    0x00    /* query available functions */
  208. #define ETR_PTFF_QTO    0x01    /* query tod offset */
  209. #define ETR_PTFF_QSI    0x02    /* query steering information */
  210. #define ETR_PTFF_ATO    0x40    /* adjust tod offset */
  211. #define ETR_PTFF_STO    0x41    /* set tod offset */
  212. #define ETR_PTFF_SFS    0x42    /* set fine steering rate */
  213. #define ETR_PTFF_SGS    0x43    /* set gross steering rate */
  214.  
  215. /* Functions needed by the machine check handler */
  216. void etr_switch_to_local(void);
  217. void etr_sync_check(void);
  218.  
  219. /* STP interruption parameter */
  220. struct stp_irq_parm {
  221.     unsigned int _pad0    : 14;
  222.     unsigned int tsc    : 1;    /* Timing status change */
  223.     unsigned int lac    : 1;    /* Link availability change */
  224.     unsigned int tcpc    : 1;    /* Time control parameter change */
  225.     unsigned int _pad2    : 15;
  226. } __attribute__ ((packed));
  227.  
  228. #define STP_OP_SYNC    1
  229. #define STP_OP_CTRL    3
  230.  
  231. struct stp_sstpi {
  232.     unsigned int rsvd0;
  233.     unsigned int rsvd1 : 8;
  234.     unsigned int stratum : 8;
  235.     unsigned int vbits : 16;
  236.     unsigned int leaps : 16;
  237.     unsigned int tmd : 4;
  238.     unsigned int ctn : 4;
  239.     unsigned int rsvd2 : 3;
  240.     unsigned int c : 1;
  241.     unsigned int tst : 4;
  242.     unsigned int tzo : 16;
  243.     unsigned int dsto : 16;
  244.     unsigned int ctrl : 16;
  245.     unsigned int rsvd3 : 16;
  246.     unsigned int tto;
  247.     unsigned int rsvd4;
  248.     unsigned int ctnid[3];
  249.     unsigned int rsvd5;
  250.     unsigned int todoff[4];
  251.     unsigned int rsvd6[48];
  252. } __attribute__ ((packed));
  253.  
  254. /* Functions needed by the machine check handler */
  255. void stp_sync_check(void);
  256. void stp_island_check(void);
  257.  
  258. #endif /* __S390_ETR_H */
  259.